﻿Imports System
Imports System.Collections.Generic
Imports Microsoft.VisualStudio.TestTools.UnitTesting
Imports Spring.Objects.Factory.Xml
Imports ImobWeb.Negoc
Imports ImobWeb.Dominio
Imports Miron.FrameworkTeste

<TestClass()> _
Public Class ClienteNegocTeste
    Inherits TesteTransacionalInjecaoDependenciaSpring

#Region " ConfigLocations "

    Protected Overrides ReadOnly Property ConfigLocations() As String()
        Get
            NamespaceParserRegistry.RegisterParser(GetType(Spring.Data.Config.DatabaseNamespaceParser))
            Return New [String]() {"assembly://Teste.ImobWeb/Teste.ImobWeb/AutoWired.xml"}
        End Get
    End Property

#End Region

#Region "Additional test attributes"
    '
    ' You can use the following additional attributes as you write your tests:
    '
    ' Use ClassInitialize to run code before running the first test in the class
    ' <ClassInitialize()> Public Shared Sub MyClassInitialize(ByVal testContext As TestContext)
    ' End Sub
    '
    ' Use ClassCleanup to run code after all tests in a class have run
    ' <ClassCleanup()> Public Shared Sub MyClassCleanup()
    ' End Sub
    '
    'Use TestInitialize to run code before running each test
    <TestInitialize()> Public Overloads Sub Initialize()
        MyBase.DefaultRollback = False
        MyBase.Initialize()
    End Sub
    '
    ' Use TestCleanup to run code after each test has run
    ' <TestCleanup()> Public Sub MyTestCleanup()
    ' End Sub
    '
#End Region

#Region "Particoes de Equivalencia"

    Public Const PARTICAO_CLIENTE As String = " Select IdPessoa from Pessoa Where Discriminator = 'Cliente' "

#End Region

#Region "Classes Injetadas"

    Private _clienteNegoc As IClienteNegoc
    Public Property ClienteNegoc() As IClienteNegoc
        Get
            Return _clienteNegoc
        End Get
        Set(ByVal value As IClienteNegoc)
            _clienteNegoc = value
        End Set
    End Property

    Private _particaoEquivalencia As ParticaoEquivalencia
    Public Property ParticaoEquivalencia() As ParticaoEquivalencia
        Get
            _particaoEquivalencia = New ParticaoEquivalencia("BASE_IMOB")
            Return _particaoEquivalencia
        End Get
        Set(ByVal value As ParticaoEquivalencia)
            _particaoEquivalencia = value
        End Set
    End Property

#End Region

    <TestMethod()> _
    Public Sub BuscarClientePorId()

        Dim _idCliente As Long = Me.ParticaoEquivalencia.StringFromQuery(PARTICAO_CLIENTE)
        Dim _cliente As Cliente

        _cliente = Me.ClienteNegoc.Buscar(_idCliente)

        Assert.IsNotNull(_cliente)

    End Sub

    <TestMethod()> _
    Public Sub SalvarCliente()

        'Dim _cliente As New Cliente

        '_cliente.Nome = "Novo cliente teste unitário"
        '_cliente.CPF = "123.456.789-0"

        'Me.ClienteNegoc.Salvar(_cliente)

        'Assert.IsTrue(True)

    End Sub

    <TestMethod()> _
    Public Sub SalvarAtributosCliente()

        Dim _cliente As Cliente
        Dim _email As New Email
        Dim _telefone As New Telefone
        Dim _endereco As New Endereco

        _cliente = Me.ClienteNegoc.Buscar(Me.ParticaoEquivalencia.StringFromQuery(PARTICAO_CLIENTE))

        _email.Endereco = "teste@unitario.net"

        _telefone.DDD = "21"
        _telefone.Numero = "7777-8888"
        _telefone.Tipo = TipoTelefone.Celular

        _endereco.Bairro = "Bairro"
        _endereco.CEP = "123456-789"

        _cliente.Enderecos = New List(Of Endereco)
        _cliente.Enderecos.Add(_endereco)

        _cliente.Contatos = New List(Of Contato)
        _cliente.Contatos.Add(_telefone)
        _cliente.Contatos.Add(_email)

        Me.ClienteNegoc.Salvar(_cliente)

        Assert.IsTrue(True)

    End Sub


    '#Region "Ikabo"

    '#Region "Acesso"

    '    <TestMethod()> _
    '    Public Sub CriarUsuarioDoSite()

    '        ' Usuário = Email

    '        Assert.Inconclusive("IMPLEMENTAR")

    '    End Sub

    '    '<ExpectedException(GetType(ExceptionEmailJaCadastrado))> _
    '    <TestMethod()> _
    '    Public Sub CriarUsuarioDoSite_Negativo()

    '        Assert.Inconclusive("IMPLEMENTAR")

    '    End Sub

    '    <TestMethod()> _
    '    Public Sub BuscarUsuarioDoSite()

    '        ' Tipos de busca: Id, CPF, Passaporte, Email

    '        Assert.Inconclusive("IMPLEMENTAR")

    '    End Sub

    '    '<ExpectedException(GetType(ExceptionUsuarioInexistente))> _
    '    <TestMethod()> _
    '    Public Sub BuscarUsuarioDoSite_Negativo()

    '        Assert.Inconclusive("IMPLEMENTAR")

    '    End Sub

    '    ''' <summary>
    '    ''' Perfis de acesso serão cadastrados manualmente: Consumidor, Estabelecimento, Administrador do Site
    '    ''' </summary>
    '    <TestMethod()> _
    '    Public Sub BuscarPerfisDeAcesso()

    '        Assert.Inconclusive("IMPLEMENTAR")

    '    End Sub

    '    ''' <summary>
    '    ''' Um único usuário pode ser um consumidor do site, um lojista e administrador
    '    ''' </summary>
    '    ''' <remarks></remarks>
    '    <TestMethod()> _
    '    Public Sub AtribuirPerfisAoUsuario()



    '        Assert.Inconclusive("IMPLEMENTAR")

    '    End Sub

    '    ''' <summary>
    '    ''' Validar se as credenciais fornecidas pelo usuário estão corretas
    '    ''' </summary>
    '    ''' <remarks></remarks>
    '    <TestMethod()> _
    '    Public Sub ValidarAutenticacaoDoUsuario()


    '        Assert.Inconclusive("IMPLEMENTAR")

    '    End Sub

    '    ''' <summary>
    '    ''' Validar se as credenciais fornecidas pelo usuário estão corretas
    '    ''' </summary>
    '    ''' <remarks></remarks>
    '    <TestMethod()> _
    '    Public Sub ValidarAutenticacaoDoUsuario_Negativo()

    '        '<ExpectedException(GetType(ExceptionCredenciaisInformadasInvalidas))> _


    '        Assert.Inconclusive("IMPLEMENTAR")

    '    End Sub

    '    ''' <summary>
    '    ''' Validar se o usuário possui acesso a uma funcionalidade
    '    ''' </summary>
    '    ''' <remarks></remarks>
    '    <TestMethod()> _
    '    Public Sub ValidarAutorizacaoDoUsuarioAUmaFuncionalidade()


    '        Assert.Inconclusive("IMPLEMENTAR")

    '    End Sub

    '    '<ExpectedException(GetType(ExceptionUsuarioNaoPossuiAcessoAFuncionalidade))> _
    '    <TestMethod()> _
    '    Public Sub ValidarAutorizacaoDoUsuarioAUmaFuncionalidade_Negativo()

    '        Assert.Inconclusive("IMPLEMENTAR")

    '    End Sub

    '    ''' <summary>
    '    ''' Identificar papel do usuário para o site efetuar o redirecionamento para a página correspondente
    '    ''' </summary>
    '    ''' <remarks></remarks>
    '    <TestMethod()> _
    '    Public Sub RecuperarPaginaRedirecionamentoPorPerfilDeAcesso()

    '        ' Prioridade: Administrador do Site, Estabelecimento, Consumidor

    '        Assert.Inconclusive("IMPLEMENTAR")

    '    End Sub

    '    ''' <summary>
    '    ''' Recuperar senha de acesso ao site pelo email cadastrado, CPF, Passaporte ou usuário
    '    ''' </summary>
    '    <TestMethod()> _
    '    Public Sub RecuperarSenhaDeAcessoAoSite()

    '        ' Recuperar a senha do usuário independente do papel
    '        ' Enviar email para o usuário com um código de verificação
    '        ' Não enviar a senha por email
    '        ' Ao acessar o link com o código de verificação, solicitar a nova senha


    '        Assert.Inconclusive("IMPLEMENTAR")

    '    End Sub

    '    ''' <summary>
    '    ''' Recuperar senha de acesso ao site pelo email cadastrado, CPF, Passaporte ou usuário - Quando o mesmo não existe
    '    ''' </summary>
    '    <TestMethod()> _
    '    Public Sub RecuperarSenhaDeAcessoAoSite_Negativo()

    '        '<ExpectedException(GetType(ExceptionNenhumUsuarioExiste))> _

    '        Assert.Inconclusive("IMPLEMENTAR")

    '    End Sub

    '#End Region

    '#Region "Cadastro de usuário com perfil de Consumidor, Estabelecimento e Adminsitrador do site"

    '    ''' <summary>
    '    ''' Criar usuário e atribuir perfil de consumidor
    '    ''' </summary>
    '    ''' <remarks></remarks>
    '    <TestMethod()> _
    '    Public Sub EuComoVisitanteQueroMeCadastrarComoConsumidorDoSite()

    '        Assert.Inconclusive("IMPLEMENTAR")

    '    End Sub

    '    '<ExpectedException(GetType(ExceptionEmailJaCadastrado))> _
    '    <TestMethod()> _
    '    Public Sub EuComoVisitanteQueroMeCadastrarComoConsumidorDoSite_Negativo_EmailJaCadastrado()

    '        Assert.Inconclusive("IMPLEMENTAR")

    '    End Sub

    '    '<ExpectedException(GetType(ExceptionDocumentoJaCadastrado))> _
    '    <TestMethod()> _
    '    Public Sub EuComoVisitanteQueroMeCadastrarComoConsumidorDoSite_Negativo_DocumentoJaCadastrado()

    '        ' Validar existencia de usuario com o mesmo CPF e Passaporte

    '        Assert.Inconclusive("IMPLEMENTAR")

    '    End Sub

    '    ''' <summary>
    '    ''' Criar usuário e atribuir perfil de Estabelecimento
    '    ''' </summary>
    '    ''' <remarks></remarks>
    '    <TestMethod()> _
    '    Public Sub EuComoVisitanteQueroMeCadastrarComoEstabelecimentoDoSite()

    '        Assert.Inconclusive("IMPLEMENTAR")

    '    End Sub

    '    ''' <summary>
    '    ''' Criar um usuário e atribuir o perfil administrador ao mesmo
    '    ''' Enviar email de notificação aos usuários que possuem perfil de administrador
    '    ''' </summary>
    '    ''' <remarks></remarks>
    '    <TestMethod()> _
    '    Public Sub EuComoAdministradorQueroCadastrarUmNovoUsuarioComoAdministrador()

    '        Assert.Inconclusive("IMPLEMENTAR")

    '    End Sub

    '#End Region

    '#Region "Logradouros"

    '    <TestMethod()> _
    '    Public Sub BuscarLogradouroPorCEP()

    '        Assert.Inconclusive("IMPLEMENTAR")

    '    End Sub

    '    '<ExpectedException(GetType(ExceptionCEPNaoEncontrado))> _
    '    <TestMethod()> _
    '    Public Sub BuscarLogradouroPorCEP_Negativo()

    '        Assert.Inconclusive("IMPLEMENTAR")

    '    End Sub

    '    <TestMethod()> _
    '    Public Sub BuscarUFs()

    '        Assert.Inconclusive("IMPLEMENTAR")

    '    End Sub

    '    <TestMethod()> _
    '    Public Sub BuscarCidadesDeUmaUF()

    '        Assert.Inconclusive("IMPLEMENTAR")

    '    End Sub

    '    <TestMethod()> _
    '    Public Sub BuscarBairrosDeUmaCidade()

    '        Assert.Inconclusive("IMPLEMENTAR")

    '    End Sub

    '    <TestMethod()> _
    '    Public Sub EuComoAdministradorQueroCadastrarUmLogradouro()

    '        Assert.Inconclusive("IMPLEMENTAR")

    '    End Sub

    '    <TestMethod()> _
    '    Public Sub EuComoAdministradorQueroQueAsBuscasDeCEPFeitasPeloSiteSejamLogadas()

    '        Assert.Inconclusive("IMPLEMENTAR")

    '    End Sub

    '    <TestMethod()> _
    '    Public Sub EuComoAdministradorQueroConsultarAsBuscasDeCEPFeitasPeloSite()

    '        Assert.Inconclusive("IMPLEMENTAR")

    '    End Sub

    '    <TestMethod()> _
    '    Public Sub EuComoVisitanteQueroBuscarEstabelecimentosPeloCEP()

    '        Assert.Inconclusive("IMPLEMENTAR")

    '    End Sub

    '#End Region

    '#Region "Visitante"

    '    '<ExpectedException(GetType(ExceptionEmailJaCadastrado))> _
    '    <TestMethod()> _
    '    Public Sub EuComoVisitanteQueroBuscarEstabelecimentosPeloCEP_Negativo()

    '        Assert.Inconclusive("IMPLEMENTAR")

    '    End Sub

    '    <TestMethod()> Public Sub EuComoVisitanteQueroVsualizarOsEstabelecimentosEmDestaque()

    '        Assert.Inconclusive("IMPLEMENTAR")

    '    End Sub

    '    '<ExpectedException(GetType(ExceptionNenhumEstabelecimentoEmDestaque))> _
    '    <TestMethod()> Public Sub EuComoVisitanteQueroVsualizarOsEstabelecimentosEmDestaque_Negativo()

    '        Assert.Inconclusive("IMPLEMENTAR")

    '    End Sub

    '    <TestMethod()> Public Sub EuComoVisitanteQueroVisualizarOsPlanosETarifas()

    '        Assert.Inconclusive("IMPLEMENTAR")

    '    End Sub

    '    '<ExpectedException(GetType(ExceptionNenhumPlanoEncontrado))> _
    '    <TestMethod()> _
    '    Public Sub EuComoVisitanteQueroVisualizarOsPlanosETarifas_Negativo()

    '        Assert.Inconclusive("IMPLEMENTAR")

    '    End Sub

    '    <TestMethod()> _
    '    Public Sub EuComoVisitanteQueroMeCadastrarComoEstabelecimento()

    '        Assert.Inconclusive("IMPLEMENTAR")

    '    End Sub

    '    <TestMethod()> _
    '    Public Sub EuComoVisitanteQueroEntrarEmContatoComOSitePeloFormularioDoSite()

    '        Assert.Inconclusive("IMPLEMENTAR")

    '    End Sub

    '    '<ExpectedException(GetType(ExceptionErroAoEnviarEmail))> _
    '    <TestMethod()> _
    '    Public Sub EuComoVisitanteQueroEntrarEmContatoComOSitePeloFormularioDoSite_Negativo()

    '        Assert.Inconclusive("IMPLEMENTAR")

    '    End Sub

    '    <TestMethod()> _
    '    Public Sub EuComoVisitanteQueroSugerirUmEstabelecimento()

    '        Assert.Inconclusive("IMPLEMENTAR")

    '    End Sub

    '    <TestMethod()> _
    '    Public Sub EuComoVisitanteQueroSugerirUmaCidade()

    '        Assert.Inconclusive("IMPLEMENTAR")

    '    End Sub

    '#End Region

    '#Region "Estabelecimento"

    '    <TestMethod()> _
    '    Public Sub EuComoEstabelecimentoQueroCadastrarUmProduto()

    '        ' Assert se o produto está pendente de aprovação pela adm do site

    '        Assert.Inconclusive("IMPLEMENTAR")

    '    End Sub

    '    '<ExpectedException(GetType(ExceptionProdutoJaCadastrado))> _
    '    <TestMethod()> _
    '    Public Sub EuComoEstabelecimentoQueroCadastrarUmProduto_Negativo()

    '        Assert.Inconclusive("IMPLEMENTAR")

    '    End Sub


    '#End Region

    '#Region "Administrador"

    '    <TestMethod()> _
    '    Public Sub EuComoAdministradorQueroVisualizarOsUsuariosCadastrados()

    '        Assert.Inconclusive("IMPLEMENTAR")

    '    End Sub

    '    <TestMethod()> _
    '    Public Sub EuComoAdministradorQueroCadastrarUmUsuarioComPerfilAdm()

    '        Assert.Inconclusive("IMPLEMENTAR")

    '    End Sub

    '    '<ExpectedException(GetType(ExceptionUsuarioJaCadastrado))> _
    '    <TestMethod()> _
    '    Public Sub EuComoAdministradorQueroCadastrarUmUsuarioComPerfilAdm_Negativo()

    '        Assert.Inconclusive("IMPLEMENTAR")

    '    End Sub

    '    <TestMethod()> _
    '    Public Sub EuComoAdministradorQueroCadastrarUmEstabelecimento()

    '        Assert.Inconclusive("IMPLEMENTAR")

    '    End Sub

    '    '<ExpectedException(GetType(ExceptionEstabelecimentoJaCadastrado))> _
    '    <TestMethod()> _
    '    Public Sub EuComoAdministradorQueroCadastrarUmEstabelecimento_Negativo()

    '        Assert.Inconclusive("IMPLEMENTAR")

    '    End Sub

    '    <TestMethod()> _
    '    Public Sub EuComoAdministradorQueroCadastrarUmaCategoriaDeProduto()

    '        Assert.Inconclusive("IMPLEMENTAR")

    '    End Sub

    '    '<ExpectedException(GetType(ExceptionCategoriaJaCadastrada))> _
    '    <TestMethod()> _
    '    Public Sub EuComoAdministradorQueroCadastrarUmaCategoriaDeProduto_Negativo()

    '        Assert.Inconclusive("IMPLEMENTAR")

    '    End Sub

    '    <TestMethod()> _
    '    Public Sub EuComoAdminitradorQueroAlterarUmaCategoria()

    '        Assert.Inconclusive("IMPLEMENTAR")

    '    End Sub

    '    <TestMethod()> _
    '    Public Sub EuComoAdministradorQueroExcluirUmaCategoria()

    '        Assert.Inconclusive("IMPLEMENTAR")

    '    End Sub

    '    '<ExpectedException(GetType(ExceptionCategoriaEmUsoNaoEhPossivelExcluir))> _
    '    <TestMethod()> _
    '    Public Sub EuComoAdministradorQueroExcluirUmaCategoria_Negativo()

    '        Assert.Inconclusive("IMPLEMENTAR")

    '    End Sub

    '    <TestMethod()> _
    '    Public Sub EuComoAdministradorQueroCadastrarUmProduto()

    '        Assert.Inconclusive("IMPLEMENTAR")

    '    End Sub

    '    '<ExpectedException(GetType(ExceptionProdutoJaCadastrado))> _
    '    <TestMethod()> _
    '    Public Sub EuComoAdministradorQueroCadastrarUmProduto_Negativo()

    '        Assert.Inconclusive("IMPLEMENTAR")

    '    End Sub

    '    <TestMethod()> _
    '    Public Sub EuComoAdministradorQueroAlterarUmProduto()

    '        Assert.Inconclusive("IMPLEMENTAR")

    '    End Sub

    '    <TestMethod()> _
    '    Public Sub EuComoAdministradorQueroExcluirUmProduto()

    '        Assert.Inconclusive("IMPLEMENTAR")

    '    End Sub

    '    '<ExpectedException(GetType(ExceptionErroAoExcluirProdutoEmUso))> _
    '    <TestMethod()> _
    '    Public Sub EuComoAdministradorQueroExcluirUmProduto_Negativo()

    '        Assert.Inconclusive("IMPLEMENTAR")

    '    End Sub

    '    <TestMethod()> _
    '    Public Sub EuComoAdministradorQueroAprovarOCadastroDeUmProdutoPorUmEstabelecimento()

    '        Assert.Inconclusive("IMPLEMENTAR")

    '    End Sub

    '    '<ExpectedException(GetType(ExceptionProdutoJaCadastrado))> _
    '    <TestMethod()> _
    '    Public Sub EuComoAdministradorQueroAprovarOCadastroDeUmProdutoPorUmEstabelecimento_Negativo()

    '        Assert.Inconclusive("IMPLEMENTAR")

    '    End Sub


    '#End Region

    '#End Region

End Class